イベント

概要

  • Next Design 内部処理イベントを受け取って、独自機能を追加できます。
  • 購読する Next Design 内部処理イベントを宣言して、それらのイベントにイベントハンドラを関連付けることで、内部処理に連動して独自処理を実行できます。

購読可能なイベント一覧

購読可能なイベントの一覧を以下に示します。

イベントの種類に応じたイベントパラメータの詳細については、 エクステンションAPIガイド > イベント を参照してください。

アプリケーション

  • エリア名

    application

  • イベント名

    イベント名 説明
    onAfterStart アプリケーション起動後イベント
    onBeforeQuit アプリケーション終了前イベント
  • イベントパラメータ

    参照: エクステンションAPIガイド > イベント

プロジェクト

  • エリア名

    project

  • イベント名

    イベント名 説明
    onAfterNew プロジェクト新規作成後イベント
    onBeforeOpen プロジェクトオープン前イベント
    onAfterOpen プロジェクトオープン後イベント
    onBeforeSave プロジェクト保存前イベント
    onAfterSave プロジェクト保存後イベント
    onBeforeClose プロジェクトクローズ前イベント
    onAfterClose プロジェクトクローズ後イベント
    onBeforeReload プロジェクトリロード前イベント
    onAfterReload プロジェクトリロード後イベント
  • イベントパラメータ

    参照: エクステンションAPIガイド > イベント

モデル

  • エリア名

    models

  • イベント名

    イベント名 説明
    onBeforeNew モデル追加前イベント
    onAfterNew モデル追加後イベント
    onFieldChanged フィールド値変更後イベント
    onBeforeDelete モデル削除前イベント
    onBeforeChangeOwner モデル親変更前イベント
    onAfterChangeOwner モデル親変更後イベント
    onBeforeChangeOrder モデル順序変更前イベント
    onAfterChangeOrder モデル順序変更後イベント
    onBeforeNewRelation 関連追加前イベント
    onAfterNewRelation 関連追加後イベント
    onValidate モデル検証時イベント
    onError エラー追加時イベント
    onModelEdited モデル編集イベント
    onUndoRedo アンドゥ・リドゥイベント
  • イベントパラメータ

    参照: エクステンションAPIガイド > イベント

コマンド

エディタ

  • エリア名

    editors

  • イベント名

    イベント名 説明
    onShow エディタ表示イベント
    onHide エディタ非表示イベント
    onSelectionChanged エディタ内モデル選択イベント
  • イベントパラメータ

    参照: エクステンションAPIガイド > イベント

ページ

ナビゲータ

  • エリア名

    navigators

  • イベント名

    イベント名 説明
    onShow ナビゲータ表示イベント
    onHide ナビゲータ非表示イベント
    onSelectionChanged ナビゲータ内モデル選択イベント
  • イベントパラメータ

    参照: エクステンションAPIガイド > イベント

情報ウィンドウ

  • エリア名

    informations

  • イベント名

    イベント名 説明
    onShow 情報ウィンドウページ表示イベント
    onHide 情報ウィンドウページ非表示イベント
    onSelectionChanged 情報ウィンドウページ表示要素選択イベント
    onDoubleClick 情報ウィンドウページ表示要素ダブルクリックイベント
  • イベントパラメータ

    参照: エクステンションAPIガイド > イベント

イベントの共通事項

  • 購読しないイベントはマニフェストに記述する必要ありません。
  • マニフェスト内で同じイベントを重複定義した場合は、次の優先順位で該当するイベントが有効となります。

    (1) イベントフィルタの値に、クラス名もしくは対象名を指定しているイベント
    (2) イベントフィルタの値に、クラスの完全修飾名を指定しているイベント(モデルのイベントフィルタのみ対象)
    (3) イベントフィルタの値に、ワイルドカード: * を指定、もしくは、イベントフィルタを省略しているイベント

    さらに、同じ優先順位内でイベントを重複定義した場合は、最初に定義されたイベントが有効となります。

  • イベントを重複定義し、優先順位が高いイベント定義の中でイベントハンドラが空のイベントを記述すると、そのイベント購読が解除されます。(例: "onAfterNew": ""

  • 複数のエクステンションで同じイベントを購読している場合、エクステンション間でのイベント発火順序は制御できません。 イベントの発火順序はマニフェストの読み込み順になります。
  • 複数のエクステンションで同じイベントを購読していて、そのイベントをいずれかのエクステンションでキャンセルした場合、残りのエクステンションではイベント発火しません。

イベントフィルタ

  • モデルに対しては、イベントフィルタの値にメタモデルのクラス名(またはクラスの完全修飾名)を指定することで購読するイベントを絞り込みできます。
  • エディタに対しては、イベントフィルタの値にビュー定義名を指定することで購読するイベントを絞り込みできます。
  • 情報ウィンドウに対しては、イベントフィルタの値にページ名を指定することで購読するイベントを絞り込みできます。
  • このイベントフィルタの仕組みを利用して購読するイベントを絞り込むことにより、不必要なイベントに対して無駄にイベントハンドラが呼び出されてレスポンスが低下することを回避できます。

モデルのイベントフィルタ

  • class プロパティに対象モデルのメタモデルでのクラス名を指定することで、特定クラスのモデルでのみイベント購読可能です。
  • クラス名の代わりにクラスの完全修飾名も指定できます。
  • 複数クラスを対象とする場合はクラス名をカンマ区切りで指定します。
  • 値にワイルドカード: * を指定、もしくは、プロパティを省略すると、全モデル共通でのイベント購読も可能です。
  • 継承元クラス名は指定できません。モデルのクラス名を指定する必要があります。

エディタのイベントフィルタ

  • viewDefinition プロパティに対象ビュー定義名を指定することで、特定のビュー定義でのみイベント購読可能です。
  • 複数のビュー定義を対象とする場合はビュー定義名をカンマ区切りで指定します。

ナビゲータのイベントフィルタ

  • navigator プロパティに対象ナビゲータ名を指定することで、特定ナビゲータでのみイベント購読可能です。
  • 対象ナビゲータ名として、次の値を指定できます。
    • Model : モデルナビゲータ
    • ProductLine : プロダクトラインナビゲータ
    • Scm : 構成管理ナビゲータ
    • Project : プロジェクトナビゲータ
    • Profile : プロファイルナビゲータ
  • 値にワイルドカード: * を指定、もしくは、プロパティを省略すると、全ナビゲータでイベント購読が可能です。
  • 複数ナビゲータを対象とする場合はナビゲータ名をカンマ区切りで指定します。

情報ウィンドウのイベントフィルタ

  • information プロパティに対象ページ名を指定することで、特定ページでのみイベント購読可能です。
  • 対象ページ名として、次の値を指定できます。
    • Error : エラーページ
    • SearchResult : 検索結果ページ
    • Output : 出力ページ
  • 値にワイルドカード: * を指定、もしくは、プロパティを省略すると、全ページでイベント購読が可能です。
  • 複数ページを対象とする場合はページ名をカンマ区切りで指定します。

イベントの定義例

下記例では、購読しないイベント(イベントハンドラが空のイベント)も記述してありますが、実際には記述の必要ありません。

{
  "name": "Manifest Test",
  "main": "main.cs",
  "lifecycle": "project",

  "extensionPoints" :
  {
    "events" :
    {
      "application" :
      {
        "onAfterStart": "",
        "onBeforeQuit": ""
      },

      "proejct" :
      {
        "onAfterNew": "",
        "onBeforeOpen": "",
        "onAfterOpen": "",
        "onBeforeSave": "ProjectOnBeforeSave",
        "onAfterSave": "",
        "onBeforeClose": "",
        "onAfterClosee": "",
        "onBeforeReload": "",
        "onAfterReload": ""
      },

      "models" :
      [
        {
          "class": "*",
          "onBeforeNew": "",
          "onAfterNew": "AllModel_OnNew",
          "onFieldChanged": "",
          "onBeforeDelete": "",
          "onBeforeChangeOwner": "",
          "onAfterChangeOwner": "",
          "onBeforeChangeOrder": "",
          "onAfterChangeOrder": "",
          "onBeforeNewRelation": "",
          "onAfterNewRelation": "",
          "onValidate": "",
          "onError": "AllModel_OnError"
        },
        {
          "class": "UseCase",
          "onAfterNew": "UseCase_OnNew",
          "onFieldChanged": "UseCase_OnFieldChanged",
          "onBeforeDelete": "UseCase_OnBeforeDelete",
          "onValidate": "UseCase_OnValidate",
          "onError": ""
        },
        {
          "class": "AnalysisFunctionType,SoftwareFunctionType",
          "onAfterNew": "FunctionType_OnNew"
        }
      ] ,

      "commands" :
      [
        {
          "commandId": "myExtension.createBlock",
          "onBeforeExecute": "CommandOnBeforeCreateBlock",
          "onAfterExecute": ""
        },
        {
          "commandId": "myExtension.updateBlock",
          "onBeforeExecute": "",
          "onAfterExecute": "CommandOnAfterUpdateBlock"
        }
      ],

      "editors" :
      [
        {
          "viewDefinition": "*",
          "onShow": "",
          "onHide": "",
          "onSelectionChanged": ""
        },
        {
          "viewDefinition": "logicalFunctionDiagaram",
          "onShow": "",
          "onHide": "",
          "onSelectionChanged": ""
        },
        {
          "viewDefinition": "logicalFunctionDetailForm",
          "onShow": "",
          "onSelectionChanged": ""
        }
      ],

      "pages" :
      {
        "onBeforeChange": "",
        "onAfterChange": ""
      },

      "navigators" :
      [
        {
          "navigator": "Model",
          "onShow": "",
          "onHide": "",
          "onSelectionChanged": ""
        },
        {
          "navigator": "Profile",
          "onShow": "",
          "onHide": "",
          "onSelectionChanged": ""
        }
      ],

      "informations" :
      [
        {
          "information": "*",
          "onShow": "",
          "onHide": "",
          "onSelectionChanged": "",
          "onDoubleClick": ""
        }
      ]
    },

    "commands": [
      {
        "id": "myExtension.createBlock",
        "execFunc": "createBlock"
      },
      {
        "id": "myExtension.updateBlock",
        "execFunc": "updateBlock"
      },
      {
        "id": "myExtension.generateCode",
        "execFunc": "generateCode"
      }
    ]
  }
}

イベントハンドラの実装例

public void ProjectOnBeforeSave(IEventContext context, IEventParams eventParams)
{
    var projectBeforeSaveEventParams = eventParams as ProjectBeforeSaveEventParams;
    if (( projectBeforeSaveEventParams != null) && (projectBeforeSaveEventParams.Project.Name == "temporary" ))
    {
        projectBeforeSaveEventParams.Cancel();
    }
}

リファレンス